const MAX_APPLICATION_WORK_MILLIS = 75;
const MENU_POPUP_TIMEOUT = 600;
const MAX_COLUMNS = 6;
+const MIN_COLUMNS = 4;
+const MIN_ROWS = 4;
const INACTIVE_GRID_OPACITY = 77;
const INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.15;
_init: function(params, gridParams) {
gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE,
columnLimit: MAX_COLUMNS,
+ minRows: MIN_ROWS,
+ minColumns: MIN_COLUMNS,
fillParent: false });
params = Params.parse(params, { usePagination: false });
_init: function(params) {
params = Params.parse(params, { rowLimit: null,
columnLimit: null,
+ minRows: 1,
+ minColumns: 1,
fillParent: false,
xAlign: St.Align.MIDDLE });
this._rowLimit = params.rowLimit;
this._colLimit = params.columnLimit;
+ this._minRows = params.minRows;
+ this._minColumns = params.minColumns;
this._xAlign = params.xAlign;
this._fillParent = params.fillParent;
* This function must to be called before iconGrid allocation,
* to know how much spacing can the grid has
*/
- updateSpacingForSize: function(availWidth) {
- let spacing = this._spacing;
-
- if (this._colLimit) {
- let itemWidth = this._hItemSize * this._colLimit;
- let emptyArea = availWidth - itemWidth;
- spacing = Math.max(spacing, emptyArea / (2 * this._colLimit));
- spacing = Math.round(spacing);
- }
- this.setSpacing(spacing);
- },
+ updateSpacingForSize: function(availWidth, availHeight) {
+ let maxEmptyVArea = availHeight - this._minRows * this._vItemSize;
+ let maxEmptyHArea = availWidth - this._minColumns * this._hItemSize;
+ let maxHSpacing, maxVSpacing;
+ if (this._minRows <= 1)
+ maxVSpacing = maxEmptyVArea;
+ else
+ maxVSpacing = Math.floor(maxEmptyVArea / (this._minRows - 1));
+
+ if (this._minColumns <= 1)
+ maxHSpacing = maxEmptyHArea;
+ else
+ maxHSpacing = Math.floor(maxEmptyHArea / (this._minColumns - 1));
+
+ let maxSpacing = Math.min(maxHSpacing, maxVSpacing);
+ // Limit spacing to the item size
+ maxSpacing = Math.min(maxSpacing, Math.min(this._vItemSize, this._hItemSize));
+ // The minimum spacing, regardless of whether it satisfies the row/column minima,
+ // is the spacing we get from CSS.
+ this.setSpacing(Math.max(this._spacing, maxSpacing));
+ }
});
const PaginatedIconGrid = new Lang.Class({